#include <stdio.h>
#include "unistd.h"
#include "sys/types.h"

int main(int argc, char const *argv[])
{
    printf("父进程: 父pid = %d\n", getpid());

    int a = 50;
    int pid = fork();

    if (pid == -1)
    {
        perror("进程fork失败");
    }
    else if (pid > 0)
    {
        // 在父进程中执行
        a++;
        printf("父进程: 父pid = %d, 子pid=%d, a = %d, a地址 = %p\n", getpid(), pid, a, &a);
        sleep(1);
    }
    else if (pid == 0)
    {
        // 在子进程中执行
        a--;
        printf("子进程: 父pid = %d, 子pid=%d, a = %d, a地址 = %p\n", getppid(), getpid(), a, &a);
    }

    printf("自己pid = %d a= %d\n", getpid(), a);

    return 0;
}
